package top.xphu.java.demo1;

import java.util.LinkedList;
import java.util.List;

/**
 * 抽象目标
 * @author xphu
 * @version 1.0
 * @date 2021/7/19 16:05
 */
abstract class Subject {

    /**
     * 存放观察者的集合
     */
    protected List<Observer> observers = new LinkedList<Observer>();

    /**
     * 增加观察者的方法
     */
    public void add(Observer observer){
        observers.add(observer);
    }

    /**
     * 移除观察者的方法
     */
    public void remove(Observer observer){
        observers.remove(observer);
    }

    /**
     * 通知观察者的方法
     */
    public abstract void notifyObserver();
}

/**
 * 具体的目标类
 */
class ConcreteSubject extends Subject{

    /**
     * 通知观察者的方法
     */
    @Override
    public void notifyObserver() {
        System.out.println("目标发生了变化...");
        System.out.println("_____________________");
        for (Observer observer : observers) {
            observer.response();
        }
    }
}
